package main

import "fmt"

/*
   双向通道
   通道，channel，是用于实现goroutine之间的通信的。
   一个goroutine可以向通道中发送数据，另一条goroutine可以从该通道中获取数据。都是既可以发送数据，也可以读取数据，把这种通道叫做双向通道。

   双向：
        chan T -->
            chan <- data,写出数据，写
            data <- chan,获取数据，读

   单向通道
   单向通道，也就是定向通道。
   可以创建单向通道，这些通道只能发送或者接收数据。

   单向：定向
        chan <- T,
            只支持写，
        <- chan T,
            只读
 */
func main() {

	// 双向，可读，可写
	ch01 := make(chan string)
	done :=make(chan bool)

	go sendData(ch01, done)

	//阻塞
	data := <- ch01
	fmt.Println("子goroutine传来：", data)
	ch01 <- "我是main。。" // 阻塞

	// 只读
	<- done
	fmt.Println("main...over....")

}

func sendData(ch chan string, done chan bool)  {
	ch <- "我是小明"// 阻塞
	data := <-ch // 阻塞
	fmt.Println("main goroutine传来：",data)

	done <- true
}
